package cn.tedu.doc_sys.service.impl;

import cn.tedu.doc_sys.ex.ServiceException;
import cn.tedu.doc_sys.mapper.RegisterMapper;
import cn.tedu.doc_sys.pojo.dto.RegisterAddNewDTO;
import cn.tedu.doc_sys.pojo.dto.RegisterLoginInfoDTO;
import cn.tedu.doc_sys.pojo.entity.Register;
import cn.tedu.doc_sys.pojo.vo.RegisterStandardVO;
import cn.tedu.doc_sys.service.IRegisterService;
import cn.tedu.doc_sys.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


@Service
@Slf4j
public class RegisterServiceImpl implements IRegisterService {

    @Autowired
    RegisterMapper registerMapper;

    public RegisterServiceImpl(){System.out.println("创建业务实现类对象：RegisterServiceImpl");}

    @Override
    public void addNew(RegisterAddNewDTO registerAddNewDTO){
        log.debug("开始处理添加业务，参数:{}",registerAddNewDTO);
        log.debug("开始用户名是否被占用");
        {String username = registerAddNewDTO.getName();
            int i = registerMapper.countByName(username);
            if(i!=0){
                String message = "添加失败，用户名称["+username+"]已经被占用";
                log.debug(message);
                throw new ServiceException(ServiceCode.ERR_CONFLICT,message);
            }
        }

        log.debug("开始查询手机号码是否被使用");
        {
            Long phone = registerAddNewDTO.getStaffPhone();
            int i = registerMapper.countByStaffPhone(phone);
            if(i!=0){
                String message = "添加失败，用户手机号码["+phone+"]已经被占用";
                log.debug(message);
                throw new ServiceException(ServiceCode.ERR_CONFLICT,message);
            }
        }
        log.debug("开始查询科室id是否被使用");
        {
            Integer officeId  = registerAddNewDTO.getOfficeId();
            int i = registerMapper.countByOfficeId(officeId);
            if(i!=0){
                String message = "添加失败，用户手机号码["+officeId+"]已经被占用";
                log.debug(message);
                throw new ServiceException(ServiceCode.ERR_CONFLICT,message);
            }
        }
        log.debug("开始查询身份证号码是否被使用");
        {
            Long useId = registerAddNewDTO.getUseId();
            int i = registerMapper.countByUseId(useId);
            if(i!=0){
                String message = "添加失败，用户手机号码["+useId+"]已经被占用";
                log.debug(message);
                throw new ServiceException(ServiceCode.ERR_CONFLICT,message);
            }
        }
        // 创建Admin对象
        Register register = new Register();
        // 通过BeanUtils.copyProperties()方法将参数对象的各属性值复制到Admin对象中
        BeanUtils.copyProperties(registerAddNewDTO, register);
        // 从Admin对象中取出密码，进行加密处理，并将密文封装回Admin对象中
        // 补全Admin对象中的属性值：loginCount >>>
        log.debug("即将插入管理员数据，参数：{}", register);
        registerMapper.insert(register);
    }
        @Override
        public void selectLogin(RegisterLoginInfoDTO registerLoginInfoDTO){
        log.debug("开始处理登录方法");
        String username = registerLoginInfoDTO.getUsername();
        int i = registerMapper.countByName(username);
        if(i!=0){
            String usePassword = registerLoginInfoDTO.getPassword();
            int i1 = registerMapper.countByUsePassword(usePassword);
            if(i1 !=0){
                String message ="恭喜登录成功";
                log.debug(message);
            }else{
                String message = "登录失败，密码错误";
                log.debug(message);
                throw new ServiceException(ServiceCode.ERR_CONFLICT,message);
            }
        }
        String message = "登录失败，用户名称错误";
        log.debug(message);
        throw  new ServiceException(ServiceCode.ERR_CONFLICT,message);
        }
    @Override
    public void delete(Long officeId){
        log.debug("开始处理【删除相册】的业务，参数：{}", officeId);
        // 调用Mapper对象的getDetailsById()方法执行查询
        RegisterStandardVO queryResult = registerMapper.getStandardById(officeId);
        // 判断查询结果是否为null
        if (queryResult == null) {
            // 是：无此id对应的数据，抛出异常
            String message = "删除相册失败，尝试访问的数据不存在！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_CONFLICT,message);
        }
        // 调用Mapper对象的deleteById()方法执行删除
        log.debug("即将删除相册数据……");
        registerMapper.deleteById(officeId);
        log.debug("删除相册，完成！");
    }

}
